プ ログラミングやRPG(作るほう)が好きな人の日記
個人的な趣味(プログラミング、イラスト、電子回路)のページです。 日記を中心に、パソコン関係について、いろいろ細かく説明することがあります。 読んでいるときに、言葉の左下に 水色の・を発見したら、 そこにマウスカーソルを合わせたり、タッチすると、言葉の意味を表示します。 |
48才、男、B型
電子機器を製造する工場で、派遣で働いています。
プログラミングが好きで小学校5年生のころからずっと続けています。
■趣味: プログラミング、ゲーム音楽を集めて聴く、イラストを描く、映画、アニメ、ガンプラ (興味の強い順)
■将来の夢は5つくらい持っていますが、生きてる間に実現できそうにありません。
■私が使っているペンネーム(ハンドルネーム)は新しい順に
ペ ンネーム(ハンドルネーム) | いつごろ | 場 所 |
---|---|---|
sankakkei、三角形 | 現在(多) | Yahoo Japan |
d_kawakawa | 現在(少) | どこでも |
cookiepurinman、cookiepudingman、cookiepuddingman | 現在(極少) | |
かわ、kawa | 30年前 | パソコン通信 |
■私への連絡手段:
ごくまれにしかツイートしませんが、私の twitter アカウントはこちらです。
https://twitter.com/cookiepudingman
何かメッセージをくれれば、返事すると思います。
返事がないときはメッセージに気付いていないんだと思います。そのときはすみません。
■管理人用:
… 国家検定の電子機器組立て2級の 暗記ツール(基板上配置)です。1級でも役立つと思います。
このサイトで最も興味を引く部分: (そのつもり)
最近、私は個人的に、「RPG のコマンドメニュー部分のプログラム」を、中高生向けに、ステップバイステップ方式で教えようとしています。
ステップ同士のプログラム上の変化をマーキングして表示したり、バルーンメッセージを使って説明を付けたりと、いろいろ工夫をしていますが、はっきり いってわかりにくいんじゃないかと思っています。
RPGメニューを作る1 基本のプログラムからはじめて、サブメニューを表示するまで Step 1~8 |
RPGメニューを作る2(記事としては4) メニューの項目に、付加情報(装備中のe記号や、店の価格)を表示。 Step 9、10、11 |
RPGメニューを作る3(記事としては5) メニューの項目を段組表示する Step 12、13 |
ポピュラスは落とせるでしょう。
その下の「Quick C」は争う気がありません。
たぶん、残り時間 間際になると、5,000円以上に跳ね上がるんですよ。
2023年1月30日追記:
ほらね、残り1日の時点で 3,191円。私が入札したときは、1,000円 でした。
「Quick C」ってこんなに争うほど良いものだったっけ??「中の下」くらいの位置づけだった印象があるんだけど。
調べるとやはり、「Microsoft C Compiler の廉価版として Quick C があった」、と Wikipedia で説明されていました。
なお、ポピュラスは落札できました。
(訪問者のどんなニーズと この記事がつながるか)
今どき、N88-日本語 BASIC(86)のプログラムリストの需要なんて無いと思いますが、、
「RPG の戦闘時メニュー入力の試作」です。
キャラごとの道具のサブメニューを表示し、さらに選んだ道具が「誰かに与えるもの」(たとえばやくそうなど)であった場合、「誰に」というサブメニューを表示します。
10 CLS
20 '
30 'DAR..IDX のような変数名は、ラベルDARENIにおけるローカル変数を示す。
40 'DARENI.IDX のような変数名は、ラベルDARENIに属すメンバ変数を示す。
50 '名前で値を引く配列様文字列の変数名は、複数形として Z を末尾に付ける。
60 '配列様文字列の~.ENTRIEZ, ~.PROPZ の書式は KEY:VALUE;KEY:VALUE;である。
70 '
80 DEF FNA( L$, K$ ) = VAL( MID$( L$, INSTR( L$, ":" + K$ + ";" ) - 2 ) )
90 '
100 ' DOUGUZ$ は道具のカタログである。
110 DIM DOUGUZ$( 99 )
120 DOUGUZ$[ 0 ] = "NAMAE:YAKUSOU;DARENI:TRUE;"
130 DOUGUZ$[ 1 ] = "NAMAE:TATE;"
140 DOUGUZ$[ 2 ] = "NAMAE:KEN;"
150 DOUGUZ.ENTRIEZ$ = ""
160 '-DOUGUZ.ENTRIEZ$ を作成している。
170 I = 0
180 WHILE DOUGUZ$[ I ] <> ""
190 ENTRYNUM$ = "0" + MID$( STR$( I ), 2 )
200 ENTRYNUM$ = MID$( ENTRYNUM$, LEN( ENTRYNUM$ ) - 1 )
210 OBJ.PROPZ$ = DOUGUZ$[ I ] : OBJ.PROP$ = "NAMAE"
220 GOSUB *OBJ : NAMAE$ = OBJ.RES$
230 DOUGUZ.ENTRIEZ$ = DOUGUZ.ENTRIEZ$ + ENTRYNUM$ + ":" + NAMAE$ + ";"
240 I = I + 1
250 WEND
260 '
270 DIM CHARS$( 4, 10 )
280 CHARS$[ 0, 0 ] = "マハルト"
290 CHARS$[ 1, 0 ] = "ブラッドン"
300 DIM DOUGUS$( 4, 10 )
310 '
320 DOUGUS$[ 0, 0 ] = "YAKUSOU"
330 DOUGUS$[ 0, 1 ] = "YAKUSOU"
340 DOUGUS$[ 0, 2 ] = "YAKUSOU"
350 '
360 DOUGUS$[ 1, 0 ] = "KEN"
370 DOUGUS$[ 1, 1 ] = "TATE"
380 '
390 '-キャラごとにコマンド入力
400 DIM SELECTS$( 4, 20 )
410 CHAR = 0
420 WHILE CHARS$[ CHAR, 0 ] <> ""
430 PRINT CHARS$[ CHAR, 0 ] + " HA, DOUSURU ?"
440 PRINT "1:TATAKAU"
450 PRINT "2:DOUGU"
460 PRINT "3:NIGERU"
470 INPUT " > ", SELECTED : SELECTED = SELECTED - 1
480 SELECTS$[ CHAR, 0 ] = "DOUSURU"
490 SELECTS$[ CHAR, 1 ] = STR$( SELECTED )
500 ON SELECTED + 1 GOSUB *TATAKAU, *DOUGU, *NIGERU
510 CHAR = CHAR + 1
520 WEND
530 '
540 'DEBUG.
550 CHAR = 0
560 WHILE CHARS$[ CHAR, 0 ] <> ""
570 PRINT CHARS$[ CHAR, 0 ]
580 J = 0
590 WHILE SELECTS$[ CHAR, J ] <> ""
600 PRINT SELECTS$[ CHAR, J ], SELECTS$[ CHAR, J + 1 ]
610 J = J + 2
620 WEND
630 CHAR = CHAR + 1
640 WEND
650 END
660 '/ MAIN
670 '
680 *TATAKAU ' =====
690 RETURN
700 '' TATAKAU
710 '
720 *DOUGU ' =====
730 PRINT "DORE ?"
740 DOU..I = 0
750 WHILE DOUGUS$[ CHAR, DOU..I ] <> ""
760 PRINT STR$( DOU..I + 1 ) + ":" + DOUGUS$[ CHAR, DOU..I ]
770 DOU..I = DOU..I + 1
780 WEND
790 INPUT " > ", SELECTED : SELECTED = SELECTED - 1
800 '-RESULT TO SELECTS
810 DOU..LEN = 0 : WHILE SELECTS$[ CHAR, DOU..LEN ] <> ""
820 DOU..LEN = DOU..LEN + 1 : WEND
830 SELECTS$[ CHAR, DOU..LEN + 0 ] = "DOUGU"
840 SELECTS$[ CHAR, DOU..LEN + 1 ] = STR$( SELECTED )
850 '-DOUGU SUB MENU
860 DARENI$ = ""
870 DOUGUZ.DOUGU$ = DOUGUS$[ CHAR, SELECTED ] : DOUGUZ.PROP$ = "DARENI"
880 GOSUB *DOUGUZ
890 DARENI$ = DOUGUZ.RES$
900 IF DARENI$ = "TRUE" THEN GOSUB *DARENI
910 RETURN
920 '/ DOUGU
930 '
940 *DARENI ' =====
950 PRINT "DARENI ?"
960 DAR..I = 0
970 WHILE CHARS$[ DAR..I, 0 ] <> ""
980 PRINT STR$( DAR..I + 1 ) + ":" + CHARS$[ DAR..I, 0 ]
990 DAR..I = DAR..I + 1
1000 WEND
1010 INPUT " > ", SELECTED : SELECTED = SELECTED - 1
1020 '-RESULT TO SELECTS
1030 DAR..LEN = 0 : WHILE SELECTS$[ CHAR, DAR..LEN ] <> ""
1040 DAR..LEN = DAR..LEN + 1 : WEND
1050 SELECTS$[ CHAR, DAR..LEN + 0 ] = "DARENI"
1060 SELECTS$[ CHAR, DAR..LEN + 1 ] = STR$( SELECTED )
1070 RETURN
1080 '/ DARENI
1090 '
1100 *OBJ ' -----] FUNCTION
1110 ' INPUT OBJ.PROPZ$ : 配列様文字列
1120 ' INPUT OBJ.PROP$ : プロパティ名
1130 ' OUTPUT OBJ.RES$ : 値
1140 OBJ..POS = INSTR( ";" + OBJ.PROPZ$, ";" + OBJ.PROP$ + ":" )
1150 OBJ..POS = OBJ..POS + LEN( OBJ.PROP$ ) + 1
1160 OBJ..LEN = INSTR( OBJ..POS, OBJ.PROPZ$ + ";", ";" ) - OBJ..POS
1170 OBJ.RES$ = MID$( OBJ.PROPZ$, OBJ..POS, OBJ..LEN )
1180 RETURN
1190 '/ OBJ
1200 '
1210 *DOUGUZ ' -----] 連想配列
1220 ' INPUT DOUGUZ.ENTRIEZ$:オブジェクトDOUGUZのエントリ
1230 ' INPUT DOUGUZ.DOUGU$ : 道具名
1240 ' INPUT DOUGUZ.PROP$ : その道具のプロパティ名
1250 ' OUTPUT DOUGUZ.RES$ : その値
1260 '
1270 '-その道具は、DOUGUZのエントリの何番目か?
1280 DOUGUZ..ENTRYNUM = FNA( DOUGUZ.ENTRIEZ$, DOUGUZ.DOUGU$ )
1290 '-そのエントリからプロパティ名を引く
1300 OBJ.PROPZ$ = DOUGUZ$[ DOUGUZ..ENTRYNUM ] : OBJ.PROP$ = DOUGUZ.PROP$
1310 GOSUB *OBJ
1320 '
1330 DOUGUZ.RES$ = OBJ.RES$
1340 RETURN
1350 '/ DOUGUZ
1360 '
▼実行の様子
プログラムを組んでいて、高校生の頃の自分にはこのプログラムは組めなかっただろうな、と思いました。
それなのに、RPG を作ろうといろいろやっていたのだから、無謀だったというか…
(訪問者のどんなニーズと この記事がつながるか)
最近になって、N88-日本語 BASIC (86) のプログラミングを始めたのはなぜかと言うと、
それは、オブジェクト指向の無い環境で、RPG を作る必要があるからです。
私は小学校 5 年生くらいのときにファミコン版「ドラゴンクエスト」で、大きく感動し、自分でも作りたいと思って、現在まで続けてきました。
しかし、自分だけで RPG を作れば良いのではなく、できれば、少年少女たちにもその作り方を教えたい。
RPG は他のゲームと比べて複雑なので、自作するのが難しいです。
そして、最近のプログラミング言語は、基本的にオブジェクト指向であることが多く、
オブジェクト指向を使えばプログラムがいろいろと整頓されて便利で良いんですが、どうも子供たちや初心者の方にとっては難しく見えるみたいなんです。
なので、オブジェクト指向の無い環境、N88-日本語 BASIC (86) で作れば、子供たちが理解しやすいプログラムで RPG を作成できると思うんです。
もちろん、N88-日本語 BASIC (86) で RPG をリリースしようというわけではありません。
あくまでも、オブジェクト指向の無い環境で、試しに作っているだけです。
(でも良いものができれば、N88-日本語 BASIC (86) でリリースするのも良いと思っています)
(訪問者のどんなニーズと この記事がつながるか)
でも私は、あまりやる気がないというか、「絶対に競り落とすぞ」という気持ちがないので、入札額は最初の額のそのまま 1,480 円で、それを超える額が入札されても、あまり競らないというか。
2023年1月27日追記:
終了3時間前に別の入札者があって、100円プラスの価格で入札されましたが、上記予言通り、私のほうからさらに高い価格を入札することはありませんでした。
残念ながら、手に入らないという結果に。。。そんなに人気のゲームってわけでもないはずですが。。
でもまた同じ商品の出品があったので、そっちに入札しました。
そのオークション終了日は、あさって日曜日の夜8時半です。
手に入るかな?
(訪問者のどんなニーズと この記事がつながるか)
30年前にさかんに使われていたプログラミング言語の1つ、「N88-日本語 BASIC (86) 」を、最近になって再び使い始めて、気が付いたこと。
配列の長さが固定長なので、どこまでデータを蓄積したのかを調べられない。
(ふつうは、array.length とやれば、配列がどれだけの長さなのかすぐにわかる)
しかたなく、配列の一番最初 TEST[ 0 ] に長さを自分で保管して管理することにした。
変数スコープ(変数が有効な範囲、の区別)が無く、すべてグローバル変数。
そのためサブルーチンから別のサブルーチンを呼んだ際に、作業用の変数名が競合しないように気を付けなくてはならない。
普通、変数名にはアルファベットと数字のほか、記号としてアンダーバーが使えることが多いが、N88-日本語 BASIC (86) ではアンダーバーが使えない。
代わりになぜかドットが使える。
たとえば、test_a と書きたい場合は、TEST.A と書くことになる。………なんだかオブジェクト指向みたいだ。
関数は無くてサブルーチンがある。(DEF FN という命令を使えば、1つの計算式だけの数学っぽい発想の「関数」を使えます)
でも、引数の「参照渡し」はなくて、、というより、そもそも引数自体がないので、サブルーチンを「汎用的に」使うことができない。
たとえば、普通は、
testFunc( array1 ); とやれば、testFunc() は array1 について処理し、そして、
testFunc( array2 ); とやれば、testFunc() は array2 について処理してくれる。
でも、N88-日本語 BASIC (86) では、
'配列を2つ作成
DIM ARRAY1( 10 ) : ARRAY1( 0 ) = 1 : ARRAY1( 1 ) = 2 : ARRAY1( 2 ) = 3
DIM ARRAY2( 10 ) : ARRAY2( 0 ) = 4 : ARRAY2( 1 ) = 5 : ARRAY2( 2 ) = 6
'サブルーチンへ飛ぶ
GOSUB *TESTSUB
END
'サブルーチン
*TESTSUB
' ここで、ARRAY1 と ARRAY2 を切り替えて処理するすべ(方法)がない!
RETURN
それがどうやってもできないことに気が付く。
「ARRAY1 を処理するサブルーチン」、「ARRAY2 を処理するサブルーチン」と、ひとつひとつ用意する必要がある。
このようにサブルーチンを汎用的に書けないことが問題として一番大きい。
連想配列(数字ではなく、名前で要素を特定できる配列)はありません。
でも、配列を使って、配列の添え字(そえじ。配列の要素を特定する数字のこと)を変数で指定するようにすれば…
DIM OBJECT$( 5 ) ' 5 はプロパティの数
NAME. = 0
PROP1. = 1
PROP2. = 2
OBJECT$[ NAME. ] = "TEST OBJECT"
OBJECT$[ PROP1. ] = "123"
連想配列みたいに、名前で配列の要素にアクセスできる。
でも実態はただの配列です。
N88-日本語 BASIC (86) の配列は「文字列要素と数値要素の混在ができない」ので、数字も表現できる「文字列配列」で実装することになる。
IF 文は ELSE も含めてすべてを1行(最大255文字まで)の中に収めなければならない。
複数行に渡って書くことができない。FOR 文は複数行に対応しているのに。。
もちろん、前述したように、下図の P.OFF などは、それで1つの変数名です。. は名前の一部です。
このポインタみたいなしくみを使えば、前述のサブルーチンの汎用化はできそうです。
でもサブルーチンを呼ぶたびに、変数を渡すたびに上図のような記述をしなければならないのは面倒かも。
…あれっ、、、もしかして、これまで書いてきた小題のロゴがバラバラ?(もしかしてじゃなくて)
じゃぁ、ひょっとしてバラバラ?(ひょっとでもなくて)
ナンジャコリャー!!太陽に吠えろ的に。(小題をロゴにしてるのがそもそもおかしい)
小題の 1, 2, 3, 4, 7 のロゴはソースネクストの「PaintGraphic 4 Pro」を使いました。
小題の 5 のロゴは「Shade3D」を使いました。
小題の 6 のロゴは「Excel」を使いました。
(訪問者のどんなニーズと この記事がつながるか)
先日、N88-日本語 BASIC (86) の自由が利かない画面の中で、ページャー機能をなんとか実装した!という記事を書きましたが、
完全に忘れていました。
N88-日本語 BASIC (86) には『EDIT』というコマンドがあって、それが便利にプログラムリストを スクロールする機能を提供してくれてました。
BASIC の画面で、EDIT 10 と打ち込めば、あとは、
ROLL UP 、ROLL DOWNキーで普通にプログラムを1行ずつ自由にスクロールできます。。
▼EDIT 機能で上下にスクロールできる
…まぁ、最後に BASIC をさわったのが 30 年以上も前だから、EDIT の存在を忘れていても仕方ないけど。。
なんだか、最近はもう、疲れてしまっていて、脳みその回転が悪いせいか、いろいろ空振りして、、困ったもんだ。
Yahoo 知恵袋のカテゴリマスターの称号も、なんか勘違いして、その称号のついた Yahoo アカウントをこともあろうに削除してしまいました。
どうして削除に至ったのか、詳しくは言えませんが、、
でも前々からよくそう考えていたんですが、私が Yahoo 知恵袋でいろいろ回答する動機は、「ベストアンサー」や「ナイス」をもらったり、「カテゴリマスター」になって いい気分になるのではなく、「質問に回答すること」そのものが動機なので、 まぁ、別にカテゴリマスターの称号はあってもなくても良くて、逆に、カテゴリマスターの称号があることで、気持ち的に重荷になってしまい、なんとなくやり づらいんです。
カテゴリマスターだ、というだけで、ぺこぺこするような態度になったり、逆に、反感を抱いて悪い態度になったりと、態度を変える人が何人かいて…
私はカテゴリマスターではなく、私は私なんですよねぇ…。
そう思ったら、なんだか元気がわいてきました。そんなふうに考える自分で良かった。
それで新しいアカウント名は、「平行四辺形」です。
台形 → 三角形 → 平行四辺形
のように私のアカウント名は「図形」のいろいろ をたどっています。
▼きれいさっぱり。さっぱり状態。
がんばって人助けしていこう…
(訪問者のどんなニーズと この記事がつながるか)
なんせ、30年前のプログラミング言語の「専用環境」なので、現在の「メモ帳」のような便利なテキストエディタが無かったんです。
下図のように「LIST 10-200」と打ち込んで、プログラムの 10 行目から 200 行目までを画面に表示できます。
「好きな場所へスクロール。」なんてものはなく、上端へ流れて消えたらそれっきり。
久しぶりにこの環境で BASIC プログラミングを始めたら、あまりに不便で、我慢ができなくなりました。
「30年前は、よくこんな環境でプログラミングを頑張っていたな…」と思い ました。
それでちょっと考えて、この「LIST」コマンドをうまく使ってプログラムの表示位置を切り替えられる「ページャー」を作れないかなと思いました。
それで作ったのが以下の動画のものです。
動画はじょうずには作っていないので、画面が速く進んでしまい、見づらいかもしれません。
▼ページャー部分のプログラムはこんな感じです。(350行から460行まで)
※ BASIC は、プログラムが終了しても変数の値は維持されるので、以前見ていた行番号の続きでページをめくることができます。
このおかげで、操作は F9> ↑、↓ >RETURN>RETURN の繰り返しで、好きな場所をページング(行 き来)できます。
これがなければ、L I S T 1 0 - 2 0 0 RETURN、 場所が見当違いだったら、再入力して探す感じなので、だいぶ楽になったと思い ます。
それから、30年前の私は知りませんでしたが、MS-DOS の AUTOEXEC.BAT と同じことが N88-BASIC でもできるので、下図 のように設定しました。( setinf.n88 というファイル名のユーティリティ)
F9 キーの設定をして、RPG のプログラムをロードしています。
なので、本当はプログラム中では F9 キーの設定は必要ありません。
(訪問者のどんなニーズと この記事がつながるか)
昨年 2022 年 3 月ごろから、1年程度、知恵袋の回答者を( "三角形" という名前で)やっ てきましたが、とうとう
「Windows系」というカテゴリの カテゴリマスター になれました。
・・・・・・・・・でも、これにはね、落とし穴があるんですよ。
カテゴリマスターになれて、正直嬉しかったんですが、「でもどういうことなのか?」と思ってカテゴリマスターについて調べたんです。
そしたら・・・
毎週月曜日に Yahoo 知恵袋のシステムは集計をおこないます。
各カテゴリにはカテゴリマスターが5人いますが、
そのうちの3人は、知恵袋 発足時からのベストアンサー獲得数の累計を見て、ベスト3を決めます。
残りの2人は、1週間のベストアンサー獲得数を見て、「急上昇のユー ザー」と いう名目でベスト2とします。
つまり、「1週間だけのカテゴリマスター」ってことでした。
「ずっとカテゴリマスター」だなんてそんな甘い話はありません。
わたくし三角形、今日から1週間、カテゴリマスター。
テヘッ、テヘッ、1週間、テヘッ
まぁ、1週間だけでもカテマス気分を味わいましょう。
ところで、なんで名前が「三角形」なのかというと、
もとは「台形」だったんです。daikei。
私の名前の苗字が「K」で始まり、下の名前が「ダイ」で始まるので、英語の名前の順にして、「ダイ・K」=台形。
そして台形という名前で少し嫌われた気がして使えなくなっちゃったんで(嫌われたというのは思い込みでした)、 じゃぁ、次は三角形でしょ、と思ってそうしたのでした。
(訪問者のどんなニーズと この記事がつながるか)
あけましておめでとうございます。
年末に行っていた、「サブディビジョン・サーフェス/ドゥ・サビン」のプログラムですが、やっ とポリゴンねじれ が直ったみたいです。
直った、と言い切れないのは、いつも直ったと思って、直ってないことが多いので、警戒しているんです。
▼むごいデバッグ中のようす
現状、 は一つもありません。
でも、ほんとに直ったのかなぁ、はやく他のやりたいプログラミングをやりたいんだけど。。
▼あっ見つけた!やっぱりか… どうしてそこに3つあるんだ??
年末年始の1週間の休みを、これのために費やしている…。
お正月2日目。
ねじれていた原因は、上図の3つのねじれが囲む、緑のポリゴンの頂点が反時計回りになっていたからでした。
3DCG のポリゴンというのは、その頂点は 時計回りなら時計回りで すべて統一しなければなりません。
▼直しました。
▼左は今紹介しているプログラムの画面、右は「Shade3D」で同じ形状に「ドゥ・サビン」を適用した画面
今紹介しているプログラムは、市販のソフトとほぼ同じものを描けてるわけですね。
やっと終わったわい =3
(訪問者のどんなニーズと この記事がつながるか)